<?php

//静态成员
/**
 * 1.静态属性用于保存类的共有数据
 * 2.静态方法里面只能访问静态属性
 * 3.静态成员不需要实例化对象就可以访问
 * 4.类的内部可以通过self或者static关键字反问自身静态成员
 * 5.可以通过parent关键字访问父类的静态成员
 * 6.可以通过类的名称在类定义外部访问静态成员
 */
	date_default_timezone_set("PRC");
//定义父类
class Human{
	public $name;
	//只有自身和子类可以访问
	protected $height;
	public $weight;
	//private的类成员只能在类的内部被访问。
	//可以通过内部的自定义的getAge()函数访问private类成员
	private $isHungry true;


	public static $sValue = 'Static valur in Human class.';
	public function eat($food){
		echo $this->name.'\'s eatinf '.$food.'<br/>';
	}
}


//类的定义与实例化

//类的定义以关键字class开始，后面跟着这个类的名称。
//类的命名通常每个单词的第一个字母大写。以花括号开始结束。
// 继承： extends + 父类名称。
// 因为php的单继承原则，故只能继承一个类。
class Nbaplayer extends Human{
	//定义属性
	
	public $team = 'Bull';
	private $age = '40';
//静态属性定义时在访问控制关键字后面添加static关键字即可
	public static $president = 'David Stern';
//静态方法定义
	public static function changePresident($newPrsdt){
		//在类定义中使用静态成员的时候，用self|static关键字跟着 ::操作符即可。注意，在访问静态成员属性的时候，::后面需要跟$符号
		self::$president = $newPrsdt;
		//使用parent关键字能够访问父类的静态成员
		echo parent::$sValue;
	}

	//构造函数   在对象被实例化的时候自动调用
	function __construct($name,$height,$weight,$team,$playerNum){
		echo "In NvaPlater!!!<br/>";
		//$this时PHP里面的伪变量，表示对象自身。
		//可以通过$this->的方式访问对象的属性和方法
		//父类中的属性，可以通过$this来访问
		$this->name = $name;
		$this->height = $height;
		$this->weight = $weight;
		$this->team = $team;
		$this->playerNum = $playerNum;
	}


	//析构函数，在程序执行结束的时候会自动调用
	//析构函数通常被用于清理程序使用的资源。
	function __destruct(){
		echo "Desttoying".$this->name.'<br/>';
	}

	//定义方法
	public function run(){
		echo "Running<br/>";
	}
	public function jump(){
		echo "Jumping<br/>";
	}
	public function dribble(){
		echo "Dribbling\n";
	}
	public function shoot(){
		echo "Shooting\n";
	}
	public function dunk(){
		echo "Dunking\n";
	}
	public function pass(){
		echo "Passing<br/>";
	}


	//可以通过一些修改，让实际和现实出现差别；
	public function getAge(){
		echo $this->name.'\'s age is '.($this->age-5).'<br/>';
	}

}
//类到对象的实例化
//类的实例化为对象时使用关键字new，之后紧跟类的名称和（）；
//Nbaplayer里的值传给function __construct()，修改默认值
//每一次用new实例化对象的时候，都会用类名后面的参数列表调用构造函数

$jordan = new Nbaplayer('jrdan','198cm','98kg','Bull','23');

$james =new Nbaplayer('james','203cm','89kg','Heat','23');


//静态调用
//在类定义外部访问静态 属性，我们可以用类名加::操作符的方法来访问类的静态成员
Nbaplayer::changePresident('Adam Silver');
echo Nbaplayer::$president.'<br/>';
echo Human::$sValue.'<br/>';
// 非静态调用
// $jordan->changePresident('Adam Silver');
// echo $jordan->president.'<br/>';
// echo $james->president.'<br/>';
?>